#include "ManejadorDeSalas.h"
#include <unistd.h>

ManejadorDeSalas::ManejadorDeSalas(VectorSala& vec) : salas(vec)
{
	estaCorriendo = false;
}

void ManejadorDeSalas::startMethod()
{
	estaCorriendo = true;
	VectorSala salasCompletas;

	while(estaCorriendo){
		sleep(2);
		for(unsigned i = 0; i < salas.size(); i++){
			//Si creo una sala y esta en espera, la pone a correr
			if(salas[i]->obtenerEstado() == enEspera){
				salas[i]->setEstado(corriendo);
				salas[i]->start();
			}
			//Si la sala se completo, la saco y la pongo en salasCompletas
			if(salas[i]->obtenerEstado() == completa){
				salasCompletas.pushBack(salas[i]);
				salas.borrar(i);
			}
		}

		for(unsigned i = 0; i < salasCompletas.size(); i++){
			//Si una sala esta finalizada la elimino
			if(salas[i]->obtenerEstado() == finalizada){
				salasCompletas[i]->join();
				delete salasCompletas[i];
				salasCompletas.borrar(i);
			}
		}
	}

	for(unsigned i = 0; i < salas.size(); i++)
		salas[i]->matar();

	for(unsigned i = 0; i < salasCompletas.size(); i++)
		salasCompletas[i]->matar();

	for(unsigned i = 0; i < salas.size(); i++){
		salas[i]->join();
		delete salas[i];
	}

	for(unsigned i = 0; i < salasCompletas.size(); i++){
		salasCompletas[i]->join();
		delete salasCompletas[i];
	}
}

void ManejadorDeSalas::matar()
{
	estaCorriendo = false;
}
